home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / hppcmode.arc / PC.ASM < prev   
Encoding:
Assembly Source File  |  1986-01-21  |  39.9 KB  |  3,285 lines

  1. ;
  2. ; code to emulate the IBM PC ROM BIOS on the HP150.
  3. ;
  4.  
  5. ; changed March 7, 1985 by MK to improve Line Draw mapping.
  6.  
  7.  page 61,132
  8.  
  9. AVIDEOSEG    EQU  0D000H
  10. BIOS_TIMER    EQU  400H    ;OFFSET TO 4 BYTE HP150 TIMER
  11. HI_VID_FUNC    EQU  15     ;HIGHEST INT 10 FUNCTION
  12. video_frequency equ 6000    ; 60 cycles per second * 100
  13. pc_frequency    equ 1821    ; 18.21 cycles per second * 100
  14.  
  15. esc        equ  27
  16. e_cr        equ  0dh
  17. e_lf        equ  0ah
  18. e_bs        equ  08h
  19. ctrls        equ  13h
  20. ctrlx        equ  18h
  21. e_true      equ  01h
  22. e_false     equ  00h
  23. ;
  24. ; entry point to firmware.
  25. ;
  26. row_jumps segment at 0000h
  27. ;
  28.     org 42fh
  29. mem_mgr   label far
  30. ;
  31. row_jumps ends
  32. ;
  33. ;*****************************************************************************
  34. pccode  SEGMENT byte public 'CODE'
  35.     ASSUME  CS:pccode,DS:pccode
  36. ;
  37. ; DATA AREA FOR RESIDENT CODE
  38. ; VARIABLES
  39. LOW_ROW     DB   0
  40. HIGH_ROW    DB   0
  41. CURSPOS     DW   0
  42. ;
  43. ;
  44. ;    these three used in MSDOS buffer keyboard input.
  45. bufptr      dw 0,0
  46. bufmax      dw 0
  47. bufindex    dw 0
  48. ;
  49. ; these variables used to return special strings, like an ANSI
  50. ; cursor position request.
  51. ret_buf     dw 0
  52. ret_cnt     dw 0
  53. old_in_hand    db 0
  54. ;
  55. ;
  56. timer_cnt    dw video_frequency
  57. pc_active    db e_false
  58. IOCTL_dev_info  dw 0
  59. ;
  60. ; these variables used by ANSI escape sequences
  61. esc_seen    db e_false
  62. in_ansi     db e_false
  63. ansi_enh    db 0ffh 
  64. saved_curpos    dw 0
  65. ansibuf_len    dw 0
  66. ansibuf     db 10h dup(0)
  67. cursensebuf    db esc,"[00;00R"
  68.  
  69. ; VALUE IS 0 IF NO DATA IS IN HAND
  70. IN_HAND     DB   e_false
  71. IN_DATA     DW   0
  72.  
  73.     extrn kb_init:near
  74.     extrn kb_reset:near
  75.     extrn kb_is_q_empty:near
  76.  
  77. ;
  78. ; Entry points. MS-PASCAL calling conventions used.
  79. ;
  80.     public pcinit,pcterm
  81. ;
  82. pcinit proc far
  83.     push ds     ; save some regs
  84.     push es
  85.     push bp
  86. ;
  87.     push cs     ; our data is in the code seg
  88.     pop ds
  89. ;
  90.     mov ax,3521h        ; get MSDOS vector for later calls
  91.     int 21h
  92.     mov word ptr msdos_entry,bx
  93.     mov word ptr msdos_entry+2,es
  94. ;
  95.     call init_interrupts
  96. ;
  97.     call kb_init        ; initialize the keyboard driver
  98. ;
  99.     call enable_pc
  100. ;
  101.     pop bp
  102.     pop es
  103.     pop ds
  104.     ret
  105. pcinit  endp
  106. ;
  107. ;
  108. pcterm proc far
  109.     push ds     ; save some regs
  110.     push es
  111.     push bp
  112. ;
  113.     push cs
  114.     pop ds
  115. ;
  116.     call disable_pc
  117.     call kb_reset        ; clear keyboard driver.
  118.     call clr_interrupts
  119. ;
  120.     pop bp
  121.     pop es
  122.     pop ds
  123.     ret
  124. pcterm endp
  125.  
  126. enable_pc proc near
  127.     mov ax,4400h        ; save console device info
  128.     xor bx,bx        ; console handle is zero
  129.     int 21h
  130.     mov dh,0        ; clear high byte if info.
  131.     mov IOCTL_dev_info,dx
  132. ;
  133.     call init_video
  134.     mov pc_active,e_true
  135.     mov ansi_enh,0ffh
  136.     mov ah,83h
  137.     int 16h
  138.     ret
  139. enable_pc endp
  140. ;
  141. disable_pc proc near
  142.     mov pc_active,e_false
  143.     mov ah,84h
  144.     int 16h
  145.     call reset_video
  146. ;
  147.     mov dx,IOCTL_dev_info    ; restore dev info
  148.     mov ax,4401h
  149.     xor bx,bx        ; console handle = 0
  150.     int 21h
  151.     ret
  152. disable_pc endp
  153.  
  154. ;  HERE ON INTERRUPT 10
  155. INT10:  STI                ;RESTORE INTERRUPTS
  156.     PUSH SI
  157.     PUSH DI
  158.     PUSH DX
  159.     PUSH CX
  160.     PUSH BX
  161.     PUSH ES
  162.     PUSH DS
  163.     PUSH AX 
  164.     PUSH CS
  165.     POP  DS
  166. ;
  167.     test ah,80h        ; test for extended functions
  168.     jz normal_int10
  169. ;
  170.     mov di,offset extend_int10_vects
  171.     cmp ah,86h
  172.     jg badcall
  173. ;
  174.     and ah,7fh        ; clear extend fct flag.
  175.     jmp short int10_exit
  176. ;
  177. normal_int10:
  178.     mov di,offset int10_vects
  179.     CMP  AH,HI_VID_FUNC
  180.     JG   BADCALL        ;ERROR
  181. ;
  182. int10_exit:
  183.     push ax
  184.     MOV  AL,AH
  185.     XOR  AH,AH
  186.     SHL  AX,1
  187.     ADD  DI,AX
  188.     pop  ax
  189.     JMP  WORD PTR [DI]    ;CALL SERVER FOR INT10 SUBFUNC
  190.  
  191. ; UNSUPPORTED INT 10 SUBFUNCTIONS
  192. SET_MODE:        ;SET VIDEO MODE
  193. SET_CTYPE:        ;SET CURSOR TYPE
  194. ACT_DISP_PAGE:      ;SELECT ACTIVE DISPLAY PAGE
  195. SET_COLOR:        ;SET COLOR PALETTE / BACKGROUND COLOR
  196. WRITE_DOT:        ;WRITE A SINGLE PIXEL
  197. READ_DOT:        ;READ A SINGLE PIXEL
  198. BADCALL:
  199.     JMP  RETURN
  200. ;
  201. INT10_VECTS:
  202.     DW    OFFSET SET_MODE     ; 0
  203.     DW    OFFSET SET_CTYPE    ; 1
  204.     DW    OFFSET write_cursor    ; 2
  205.     DW    OFFSET READ_CURSOR    ; 3
  206.     DW    OFFSET READ_LPEN    ; 4
  207.     DW    OFFSET ACT_DISP_PAGE    ; 5
  208.     DW    OFFSET SCROLL_UP    ; 6
  209.     DW    OFFSET SCROLL_DOWN    ; 7
  210.     DW    OFFSET READ_AC_CURRENT  ; 8
  211.     DW    OFFSET WRITE_AC_CURRENT ; 9
  212.     DW    OFFSET WRITE_C_CURRENT  ; 10
  213.     DW    OFFSET SET_COLOR    ; 11
  214.     DW    OFFSET WRITE_DOT    ; 12
  215.     DW    OFFSET READ_DOT     ; 13
  216.     DW    OFFSET WRITE_TTY    ; 14
  217.     DW    OFFSET VIDEO_STATE    ; 15
  218.  
  219. extend_int10_vects:
  220.     dw    offset extend_enable    ; 80h
  221.     dw    offset extend_disable    ; 81h
  222.     dw    offset read_ac_random    ; 82h
  223.     dw    offset write_ac_random  ; 83h
  224.     dw    offset write_c_random    ; 84h
  225.     dw    offset bell_fct     ; 85h
  226.     dw    offset status_fct    ; 86h
  227. ;
  228. ; extended INT 10 fucntion 85h, ring bell
  229. ;
  230. ; entry: fct ah = 85h    
  231. ;      al = frequency. values are 0 through 0fh, for frequencies
  232. ;      from 290 Hz to 1.7 KHz.
  233. ;      bl = duration, in units of 100m secs
  234. ;
  235. bell_fct:
  236.     and al,0fh
  237.     or al,030h
  238. ;
  239. bell_fct_loop:
  240.     out 19h,al
  241.     call delay
  242.     cmp bl,0
  243.     jle bell_fct90
  244.     dec bl
  245.     jnz bell_fct_loop
  246. ;
  247. bell_fct90:
  248.     jmp return
  249. ;
  250. ;
  251. ; delay 100 milliseconds
  252. ;
  253. delay proc near
  254.     mov cx,2800h
  255. delay_loop:
  256.     push si
  257.     pop si
  258.     loop delay_loop
  259.     ret
  260. delay endp
  261. ;
  262. ;  beep the bell
  263. ;
  264. beep proc near
  265.     mov    ax,8509h    ; use extended fct to ring bell.
  266.     mov    bl,1
  267.     int    10h
  268.     ret
  269. beep endp
  270.  
  271. ;
  272. ; extended INT 10 function, enable PC emulation (default).
  273. ;
  274. extend_enable:
  275.     call enable_pc
  276.     jmp return
  277. ;
  278. extend_disable:
  279.     call disable_pc
  280.     jmp return
  281. ;
  282. ; extended INT 10 fct, return status of PC emulation
  283. ;
  284. ;    on exit: al = 1 if emulation is active
  285. ;         al = 0 if emulation is inactive
  286. status_fct:
  287.     mov al,pc_active
  288.     mov ah,0
  289.     jmp retnewax
  290. ;
  291. ; RETURN CURRENT CURSOR POSITION IN DX
  292. READ_CURSOR:
  293.     MOV    DX,CURSPOS
  294.     MOV    CX,0        ;DEFAULT/DUMMY CURSOR TYPE
  295.     POP    AX
  296.     POP    DS
  297.     POP    ES
  298.     POP    BX
  299.     POP    DI        ;DISCARD OLD CX
  300.     POP    DI        ;DISCARD OLD DX
  301.     POP    DI
  302.     POP    SI
  303.     IRET         ;JUST RETURN TO INTERRUPTER
  304.  
  305.  
  306. ;  SCROLLING
  307. ;    CX = Row , Column of upper left corner
  308. ;    DX = Row , Column of lower right corner
  309. ;    BH = Attr char on blank line
  310. ;    AL = Number of rows to scroll (0 = Blank All)
  311. SCROLL_DOWN:
  312.     NEG    AL        ;MOVE ROWS DOWN
  313. SCROLL_UP:
  314.     MOV    bl,BH        ;PASS ATTR IN bL
  315.     CALL    CONV_ATTR    ;CONVERT ATTRIBUTE TO HP
  316.     MOV    AH,bl        ;AH = ATTRIBUTE (HP)
  317.     CALL    SCROLL_SUBR
  318.     JMP    RETURN
  319.  
  320. ; SUBROUTINE TO HANDLE ALL SCROLLING
  321. ;
  322. ;   entry:  al = scroll count.
  323. ;        dx = row, col of lower right corner
  324. ;        cx = row, column of upper left
  325. ;        ah = HP enhancement
  326. SCROLL_SUBR:
  327.     MOV    LOW_ROW,DH
  328.     MOV    HIGH_ROW,CH
  329.     XCHG    AL,DH
  330.     SUB    AL,CH        ;# OF ROWS IN SCROLL WINDOW
  331.     JS    scroll_quit    ;LOWER ROW IS HIGHER THAN HIGHER
  332.     INC    AL        ;AL = COUNT OF ROWS IN WINDOW
  333.     SUB    DL,CL        ;RIGHT COL - LEFT COL
  334.     JS    scroll_quit    ;RIGHT IS LEFT OF LEFT COL
  335.     INC    DL
  336.     OR    DH,DH
  337.     JNS    SC_2        ;JUMP IF SCROLLING UP
  338.     MOV    CH,LOW_ROW    ;CH = LOWEST ROW
  339. SC_2:    XCHG    CL,DL        ;CL= # OF COLS IN WINDOW, DL = START COL
  340.     PUSH    SI
  341.     CLD
  342. ;
  343. ; DL = STARTING COLUMN, CH = NEXT ROW TO BE MOVED INTO, AH = ATTR CHARACTER
  344. ; CL = # OF COLS TO MOV, AL = # OF SCROLLS REMAINING, DH = # OF ROWS TO MOV
  345. NEXT_SCR: PUSH  CX
  346.     PUSH    AX
  347.     push    dx
  348.     MOV    dh,CH
  349.     CALL    ROWADDR
  350.     pop    dx
  351.     MOV    BL,CH
  352.     XOR    CH,CH
  353.     OR    DH,DH
  354.     JZ    DO_FILL     ;BLANKING ALL
  355.     ADD    BL,DH        ;COMPUTE ROW WE'RE MOVING FROM
  356.     CMP    BL,HIGH_ROW    
  357.     JL    DO_FILL     ;BELOW LOWER ROW
  358.     CMP    BL,LOW_ROW
  359.     JG    DO_FILL     ;ABOVE HIGHER ROW
  360.     PUSH    DI
  361.     push    dx
  362.     mov    dh,bl
  363.     CALL    ROWADDR
  364.     pop    dx
  365.     MOV    SI,DI
  366.     POP    DI
  367.     push    ds        ; save our DS
  368.     push    es
  369.     pop    ds        ;both ES and DS to video area.
  370.     REP    MOVSW        ;MOVE IT
  371.     pop ds
  372. NSCR_1: POP    AX
  373.     POP    CX
  374.     OR    DH,DH
  375.     JNS    NSCR_2
  376.     DEC    CH        ;SCROLLING DOWN
  377.     JMP    SHORT NSCR_3
  378. NSCR_2: INC    CH        ;SCROLLING UP
  379. NSCR_3: DEC    AL
  380.     JNZ    NEXT_SCR
  381.     POP    SI
  382. scroll_quit:
  383.     RET
  384. ;
  385. DO_FILL: POP    AX        ;GET THE ATTR CHARACTER
  386.     PUSH    AX
  387.     push    ds
  388.     push    es
  389.     pop    ds
  390.     MOV    AL,020H     ;ATTRIBUTES
  391.     REP STOSW        ;FILL THE LINE
  392.     pop    ds
  393.     JMP    NSCR_1
  394.  
  395. ;  DH = row , DL = column
  396. ;  on exit ES:DI = addr of char in video mem.
  397. ROWADDR:
  398.     mov    ax,avideoseg
  399.     mov    es,ax
  400. ;
  401.     mov    ah,0
  402.     mov    al,dh
  403.     mov    di,ax
  404.     SHL    di,1
  405.     SHL    di,1
  406.     ADD    di,row_tab    ;DI= ADDR INTO 25 ENTRY HARDWARE PTRS
  407.     MOV    AL,DL
  408.     CBW
  409.     ADD    AL,es:[di]    
  410.     ADC    AH,es:[di+2]
  411.     SHL    AX,1        ;AX = ADDR IN VIDEO MEMORY OR ROW,COL
  412.     MOV    DI,AX
  413.     RET
  414.  
  415. ; WRITE CHARACTER, NO ATTRIBUTE
  416. WRITE_C_current:
  417.     mov    dx,curspos
  418. write_c_random:
  419.     MOV    bl,0FFH     ;NO ENHANCEMENT CHANGE
  420. write_c_common:
  421.     push    ax
  422.     push    bx
  423.     CALL    FASTC
  424.     pop    bx
  425.     pop    ax
  426.     inc    dl        ; increment the column
  427.     cmp    dl,79
  428.     jle    write_c_continue
  429.     mov    dl,0
  430.     inc    dh
  431. write_c_continue:
  432.     loop    write_c_common
  433.     JMP    RETURN
  434.  
  435. ; WRITE CHAR AND ATTRIBUTE
  436. WRITE_AC_CURRENT:
  437.     mov    dx,curspos
  438. write_ac_random:
  439.     CALL    CONV_ATTR     ;CONVERT ATTRIBUTE TO HP
  440.     jmp    write_c_common
  441.  
  442. ; WRITE CHARACTER AT CURRENT CURSOR
  443. WRITE_TTY:
  444.     call    conout
  445.     jmp    return
  446.  
  447. write_cursor:
  448.     call    setcursor
  449.     JMP    RETURN
  450. ;
  451. ; Read the "light pen" For the HP150, read the touch screen.
  452. read_lpen:
  453.     mov    ah,81h      ; Extended HP function for reading touch screen.
  454.     int    16h
  455.     cmp    al,0ffh     ; check if no data available.
  456.     jne    got_lpen
  457. ;
  458.     mov    ah,0
  459.     jmp    retnewax
  460. ;
  461. got_lpen:
  462.     mov    dx,ax        ; return row col position.
  463.     mov    ch,ah        ; return graphics row.
  464.     mov    cl,3
  465.     shl    ch,cl
  466.     mov    bl,al        ; bx gets pixel col.
  467.     mov    bh,0
  468.     mov    cl,3
  469.     shl    bx,cl
  470.     mov    ah,1
  471. ;
  472.     pop    si        ; return, preserving AX,BX,CX and DX
  473.     pop    ds
  474.     pop    es
  475.     pop    si
  476.     pop    si
  477.     pop    si
  478.     pop    di
  479.     pop    si
  480.     iret
  481. ;
  482. ; read a screen character
  483. read_ac_current:
  484.     mov    dx,curspos
  485. read_ac_random:
  486.     call    fastread
  487.     jmp    retnewax
  488. ;
  489. ; read the char at current screen loc. return al = data, ah = attribute
  490. ;(dh,dl) has  (row,col)
  491. ;
  492. fastread proc near
  493.     call    rowaddr
  494.     mov    ax,es:[di]
  495.     call    conv_hp_to_ibm
  496.     push    bx        ; save attribute in BL  
  497. ;
  498.     and    ax,037fh    ; isolate character set code
  499.     cmp    ah,0
  500.     jz    fastread90    ;   done if normal char set
  501. ;
  502.     mov    si,offset game_chars    ; search game chars for match
  503.     call    check_match
  504.     jnc    fastread90    ;   no carry if good match
  505. ;
  506.     mov    si,offset extend_chars  ; check line draw, math or foreign
  507.     call    check_match
  508.     jc    fastread20    ;  jump if unknown value
  509. ;
  510.     or    al,80h      ; put into eight bit range
  511.     jmp    short fastread90
  512. ;
  513. fastread20:
  514.     mov    al," "      ; unknown char, return blank
  515. ;
  516. fastread90:
  517.     pop    bx        ; restore attribute
  518.     mov    ah,bl
  519.     ret
  520. fastread endp
  521. ;
  522. ; check_match -> serach char set table for match
  523. ;
  524. ; on entry: al holds 7 bit code. ah holds character set code
  525. ;       si points to char set table
  526. ;
  527. ; on exit:    carry set if no match
  528. ;        if carry not set, al has index value of found char
  529. ;
  530. check_match proc near
  531.     mov dl,0        ; dl is index into table
  532. check_loop:
  533.     mov cx,[si]        ; get next table entry
  534.     inc si          ; point to next word entry
  535.     inc si
  536.     cmp cl,-1        ; test if at end of table
  537.     je check_nomatch
  538. ;
  539.     and cx,037fh        ; clear out extraneous bits
  540.     cmp cx,ax    
  541.     je check_goodmatch
  542. ;
  543.     inc dl          ; inc table index
  544.     jmp check_loop
  545. ;
  546. check_goodmatch:
  547.     mov al,dl        ; replace input wchar with translation
  548.     clc            ; signal good match
  549.     ret
  550. ;
  551. check_nomatch:
  552.     stc            ; carry means no match
  553.     ret
  554. check_match endp
  555. ;
  556. ; convert hp attribute to IBM attribute. AH holds attribute.
  557. ;  return IBM attribute in bl
  558. ;
  559. conv_hp_to_ibm:
  560.     mov    bl,07h      ; scratch space in bl
  561.     test    ah,40h      ; map half bright to full intensity
  562.     jz    conv_hp10
  563.     or    bl,08h
  564. conv_hp10:
  565.     test    ah,20h      ; test underline
  566.     jz    conv_hp20
  567.     and    bl,88h
  568.     or    bl,01h
  569. conv_hp20:
  570.     test    ah,10h      ; test inverse video
  571.     jz    conv_hp30
  572.     and    bl,0f8h
  573.     or    bl,70h
  574. conv_hp30:
  575.     test    ah,08h      ; test blinking
  576.     jz    conv_hp40
  577.     or    bl,80h
  578. conv_hp40:
  579.     test    ah,80h      ; test security
  580.     jz    conv_hp50
  581.     and    bl,88h
  582. conv_hp50:
  583.     ret
  584. ;
  585. ; CONVERT ATTRIBUTE FROM IBM style to HP. value is in BL
  586. CONV_ATTR:
  587.     push    ax
  588.     xor    al,al        ; scratch space for attribute.
  589.     OR    bl,bl
  590.     JNS    CA_1        ;NOT BLINKING
  591.     OR    al,8        ;DH = BLINK
  592. CA_1:    TEST    bl,8
  593.     JZ    CA_2        ;Map high intensity to half bright
  594.     OR    al,40H      ;SET HALF-BRIGHT
  595. CA_2:    AND    bl,077H
  596.     CMP    bl,1
  597.     JNE    CA_4
  598.     OR    al,20H      ;UNDERLINE
  599. CA_4:    CMP    bl,070H
  600.     JNE    CA_6
  601.     OR    al,10H      ;INVERSE VIDEO
  602. CA_6:    cmp    bl,0
  603.     jne    ca_7
  604.     or    al,80h      ;SECURITY
  605. CA_7:    mov    bl,al
  606.     pop    ax
  607.     RET
  608.  
  609. ; ENTERED WITH ENHANCEMENT IN BL, CHAR IN AL
  610. ; (DH,DL) has (row,col)
  611. FASTC:
  612.     PUSH    AX
  613.     CALL    ROWADDR
  614.     POP    AX
  615. ;
  616.     cmp    bl,0ffh     ; if default enhance, pick up real one
  617.     jne    fastc5
  618. ;
  619.     mov bl,es:[di+1]
  620.     and bl,0f8h        ; leave Disp enhancements, clear Line and Math
  621. ;        
  622. ;  check for IBM PC game chars in range 00h to 1fh
  623. ;
  624. fastc5:
  625.     test    al,0e0h
  626.     jnz    fastc10
  627. ;
  628.     mov    ah,0
  629.     mov    si,ax
  630.     shl    si,1
  631.     mov    ax,word ptr [si+game_chars]
  632.     and    al,7fh
  633.     or    bl,ah
  634.     jmp    short fastc50
  635. ;
  636. ; check for eight bit extended chars.
  637. ;
  638. fastc10:
  639.     test    al,80h
  640.     jz    fastc50
  641. ;
  642.     and    al,7fh
  643.     mov    ah,0
  644.     mov    si,ax
  645.     shl    si,1
  646.     mov    ax,word ptr [si+extend_chars]
  647.     and    al,7fh
  648.     or    bl,ah
  649. ;
  650. fastc50:
  651.     mov    es:[di],al
  652.     mov    es:[di+1],bl
  653.     ret
  654.  
  655.  
  656. ; RETURN THE FIXED VIDEO STATE OF THE 150
  657. VIDEO_STATE:
  658.     POP    AX
  659.     POP    DS
  660.     POP    ES
  661.     POP    BX
  662.     MOV    BH,0
  663.     MOV    AX,05002H     ;80 COLUMNS X 25 :  B & W
  664.     JMP    RETCX
  665.  
  666.  
  667. ;*****************************************************************************
  668.  
  669. ;*   INTERRUPT 11 processing
  670.  
  671. ;*****************************************************************************
  672.  
  673. ;  RETURN EQUIPMENT AS 2 DISCS SYSTEM, 80X25 B&W VIDEO, NO RS232/ PRINTER
  674. INT11:    STI                ;RESTORE INTERRUPTS
  675.     MOV    AX,007DH        ;SEE IBM ROM BIOS LISTING FOR MEANINGS
  676.     IRET
  677. ;******************************************
  678.  
  679. ;*  INTERRUPT 12 memory size check
  680.  
  681. ; return the number of 1K memory blocks available.
  682. ;******************************************
  683. ;
  684. INT12:
  685.     push si     ; save some regs
  686.     push ds
  687.     push cx
  688.     push dx
  689.     push bx
  690. ;
  691.     mov ax,256    ; minimun for HP150 is 256K bytes memory
  692.     mov cx,4000h    ; CX holds segment value, starting at 256K
  693.     xor si,si    ; for zero offsets.
  694.     mov bx,55aah
  695. ;
  696. int12_loop:
  697.     mov ds,cx    ; point to high memory
  698.     cli        ; disable interrupts.
  699.     mov dl,[si]    ; save test word    
  700.     mov [si],bl    ; see if we can write to this loc
  701.     cmp [si],bl
  702.     jne int12_exit  ; no more memory if no match
  703. ;
  704.     mov [si],bh
  705.     cmp [si],bh
  706.     jne int12_exit
  707. ;
  708.     mov [si],dl        ; here if valid memory. restore original
  709.     sti            ; re-enable interrupts
  710.     add ax,64        ; move in 64K increments
  711.     add cx,1000h        ; update segment value
  712.     cmp cx,9000h        ; test if full load of memory
  713.     jne int12_loop
  714. ;
  715. int12_exit:
  716.     sti            ; re-enable interrupts
  717.     pop bx
  718.     pop dx
  719.     pop cx
  720.     pop ds
  721.     pop si
  722.     iret            ; return with memory size in AX
  723.  
  724. ;*****************************************
  725.  
  726. ;*   INTERRUPT  1C  dummy timer tic routine.
  727.  
  728. ;*******************************************
  729. ;  Interrupt 1c, timmer tic. Dummy routine. May be replaced by
  730. ; application routine.
  731.  
  732. INT1C:
  733.     IRET
  734.  
  735. ;******************************************
  736.  
  737. ;*  INTERRUPT 42  HP150 VIDEO
  738.  
  739. ;
  740. ; Interrupt 42, HP150 video interrupt. This interrupt happens 60 times
  741. ; a second. Use it to make sure that our filter on MSDOS interrupt 21
  742. ; stays in place, and to implement the IBM timer tic, 18.2 times a second.
  743. ;*******************************************
  744.  
  745. int42:
  746.     pushf        ; do real video interrupt
  747.     call dword ptr cs:[v_int42]
  748. ;
  749.     push ax     ; save some regs
  750.     push si
  751.     push es
  752.     push ds
  753. ;
  754.     push cs     ; our data is in the code segment
  755.     pop ds
  756. ;
  757. ; Check that MSDOS int 21 hasn't been restored to old value.
  758.     xor ax,ax
  759.     mov es,ax
  760.     mov si,84h    ; point straight to 0:84 for interrupt location
  761.     mov ax,word ptr [v_int21+2]     ; compare code segments.
  762.     cmp ax,es:[si+2]
  763.     jne int42_timer ; jump if still ok.
  764. ;
  765.     cli        ; disable interrupts
  766.     mov word ptr es:[si],offset int21
  767.     mov word ptr es:[si+2],cs
  768.     sti
  769. ;
  770. int42_timer:
  771.     sub word ptr timer_cnt,pc_frequency
  772.     jnc int42_exit
  773. ;
  774. ;   get here for about 1 out of 3 video interrupts (1821/6000)
  775.     add word ptr timer_cnt,video_frequency
  776.     int 1ch         ; execute user interrupt routine.
  777. ;
  778. int42_exit:
  779.     pop ds
  780.     pop es
  781.     pop si
  782.     pop ax
  783.     iret
  784.  
  785. ;********************************************
  786. ;
  787. ; Display handling routines.
  788. ;
  789. ;*******************************************
  790.  
  791. conin_ctrlc:
  792.     call constat
  793.     jz conin_ctrlc
  794.     call ctrlc_check
  795.     call conin
  796.     ret
  797. ;
  798. ; conin -> read a char from keyboard.
  799. conin:
  800.     cmp in_hand,e_true
  801.     je conin_havechar
  802. ;
  803.     mov ah,0
  804.     int 16h
  805.     jmp short conin50
  806. ;
  807. conin_havechar:
  808.     mov cx,ret_cnt
  809.     or cx,cx
  810.     jz conin_real_input
  811. ;
  812.     mov si,ret_buf
  813.     mov al,[si]
  814.     inc ret_buf
  815.     dec ret_cnt
  816.     jnz conin_ret90
  817. ;
  818.     mov cl,old_in_hand
  819.     mov in_hand,cl
  820. conin_ret90:
  821.     ret
  822. ;
  823. ;
  824. conin_real_input:
  825.     mov ax,in_data
  826. conin50:
  827.     cmp al,0        ; if non-ascii char, return as two bytes
  828.     jne conin90
  829.     mov bl,ah        ;
  830.     mov bh," "
  831.     mov in_data,bx      ; save for next read.
  832.     mov in_hand,e_true    ; flag more data available.
  833.     ret
  834. ;
  835. conin90:
  836.     mov in_hand,e_false
  837.     ret
  838.  
  839.  
  840. ctrlc_check:
  841.     cmp byte ptr in_hand,e_false
  842.     je ctrlc_check90
  843.     cmp b_q  S:
  844.     callH        TTYON}ni10
  845. 10
  846. }HP)10
  847. S    :
  848.     call
  849. pc_H
  850.     SCURR:
  851.     call        ;quenc╣     ifextendUP     th10
  852. 10
  853. curso    
  854. SCT Woc. th10
  855. 10
  856. 10
  857. 10
  858. 10
  859. 10
  860. 10
  861. 10
  862. 10
  863. 10
  864. 10
  865. 10
  866. 10
  867. 10
  868. ERRU      d.2latioONndo    ROendp
  869.  
  870. E I th10
  871. ìON10
  872. 10
  873. 10
  874. 10
  875. elayH        ffs SUBRnireaON10
  876. 10
  877. 10
  878. SUB     th10
  879. 10
  880.     DX  th10
  881. torb_ th10
  882. 10
  883. 10
  884. ENatFFHet sHIGH_
  885. SC10
  886. OR THIGH_L = :neONENN_z ONalseor 10
  887. 10
  888. alse 1.zeON10
  889. 10
  890. k i,Ht_lp: P1hON10
  891. 10
  892. ow c enh
  893. ;
  894. ; eon
  895. e
  896. LL      th10
  897. 10
  898. 10
  899. 10
  900. 10
  901. 10
  902. 10
  903. 10
  904. 10
  905. PUSH    OND 
  906. pc_10
  907. .
  908.     mov    b
  909. ;
  910. ; e        ;ght EST th10
  911. 0_vON10
  912. 10
  913. que0 te so
  914. SCemeON10
  915. 10
  916. 10
  917.  
  918.     pop    s th10
  919. e =·or 
  920. scree· 1.WIN
  921.     d·.210
  922. 10
  923. 10
  924. 10
  925. 10
  926. 10
  927. 10
  928. 10
  929. 10
  930. 10
  931. 10
  932. 10
  933. 10
  934. 10
  935. 10
  936. 10
  937.     A MS- th10
  938. 10
  939. 10
  940. lineHP)10
  941. is alat
  942. pc_it:
  943. SS lat        ;v cneaven ifoff cyc th10
  944. 10
  945. 10
  946. 10
  947. 10
  948. 10
  949. endp
  950. venL = ALL
  951. STAvenN_h eCX, th10
  952. READ_CON10
  953. 10
  954. yboON10
  955. 10
  956. 000oi th10
  957. 10
  958. ?.
  959. ;        RO10
  960. 10
  961. 10
  962. 10
  963. ingsSTC th10
  964. bx,b di 0dni    ;L
  965.  
  966. ; W 0dHP)
  967. Lncy th10
  968.  
  969. ; corn 0d        ;10
  970. 44 = A ifati_2 = AatvecON INTO
  971. SCend_eba = AL = 
  972.     mov dansib = AN_10
  973. ;
  974.     mHor vectl cH 1.10
  975. NG H.218h÷H: P10
  976. 10
  977. @    RO
  978. ;
  979. ;    WRITE_TT th10
  980. 10
  981. ndo thH        10
  982. return g
  983.  
  984. wni10
  985. 10
  986. 10
  987. 10
  988. _initTA th
  989. pc_the chry+:
  990.     callë_qk 10
  991. 10
  992. 10
  993. elaà pc_LL     D_
  994.  
  995. w10
  996. trn 2àOV    dX
  997.     pH,Aà= AItruesog b_exiCT 
  998.  
  999. w10
  1000. endpingsoursh,alfsoBOC    AHte_c
  1001.  
  1002. w10
  1003. 10
  1004. 10
  1005. 10
  1006. 10
  1007. 10
  1008. 10
  1009. ndoCH
  1010. 10
  1011. 10
  1012. 10
  1013. 10
  1014. 10
  1015. 10
  1016. 10
  1017. 10
  1018. t 1act
  1019.  
  1020. w10
  1021. 10
  1022. 10
  1023. 10
  1024. 10
  1025. 10
  1026. mm
  1027.  
  1028. w10
  1029.  
  1030.     DW    OFFnear
  1031.  
  1032.  
  1033. w10
  1034. v_k 10
  1035. 10
  1036. 10
  1037. endp
  1038. ttursc 
  1039.     mov
  1040.     j=  chCTSg b10
  1041. 10
  1042. 10
  1043. 10
  1044. 10
  1045. 10
  1046. 10
  1047. 10
  1048. 10
  1049. 10
  1050. ENOV    d10
  1051. 10
  1052. 10
  1053. 10
  1054. 10
  1055. 10
  1056. 10
  1057. 10
  1058. 10
  1059. 10
  1060. 10
  1061. 10
  1062. 10
  1063. RITttfct910
  1064. 10
  1065. 10
  1066. 10
  1067. 10
  1068. 10
  1069. 10
  1070. 10
  1071. HANGirettgot10
  1072. 10
  1073. 10
  1074. 10
  1075. 10
  1076. 10
  1077. 10
  1078. 10
  1079. 10
  1080. 10
  1081. DW    OFfct910
  1082. SI
  1083. E OOV    d10
  1084. COLSE O= it    k 10
  1085. 10
  1086. :        k 10
  1087. 10
  1088. wek OP    eg
  1089. 10
  1090. 10
  1091. 10
  1092. 10
  1093.   4ion,
  1094.  
  1095. w10
  1096. queâ
  1097.  
  1098. w10
  1099.     ofk 10
  1100. 10
  1101. 10
  1102. 10
  1103. 10
  1104. 10
  1105. 10
  1106. 10
  1107. OP    CH
  1108. col k 10
  1109. 10
  1110. 10
  1111.  ax,POP    gotS
  1112.     Mk lineeg
  1113. ,ast.SHL pc_T REk 10
  1114. 10
  1115. bx,k 10
  1116. 10
  1117. 10
  1118. ax    
  1119.  
  1120. w10
  1121. 10
  1122.  
  1123. w10
  1124. IN_k 10
  1125. 10
  1126. R
  1127.     Pk KIursR
  1128.     k 10
  1129. 10
  1130. LTk 10
  1131. 10
  1132. 10
  1133. 10
  1134. _ve pc_10
  1135. wax
  1136.  
  1137.  
  1138. w10
  1139. 10
  1140. 10
  1141. _vefct9lk 10
  1142. 10
  1143. 10
  1144. ; sa_vi_2
  1145. 10
  1146. 10
  1147. _vegote =∙
  1148.  
  1149. wOV    des
  1150.     popk 10
  1151. 10
  1152. PORH,DING oS:pk ,rOV    dTE Csi
  1153.     pemul= ARIk  INTOg bLOW_Rk 10
  1154. 10
  1155. 10
  1156. HP fINGurs10
  1157. iteINGBOs     VECING0h
  1158. dG    Ae
  1159. ;    
  1160.  
  1161. w10
  1162. 10
  1163. 1
  1164.  
  1165.  
  1166. w10
  1167. ROWS Tk @fct9:on
  1168.  
  1169. wCH
  1170. 10
  1171. re 
  1172.     l_2
  1173. h,81, DH
  1174.  
  1175. w10
  1176. _murn
  1177.  
  1178.  
  1179. weg
  1180. 10
  1181. 10
  1182. 10
  1183. 10
  1184. 10
  1185. 10
  1186. 10
  1187. 10
  1188. 10
  1189. 0h
  1190. _v10
  1191. 10
  1192.  INTOàcode10
  1193. 10
  1194. 10
  1195. 10
  1196. 10
  1197. 10
  1198. 10
  1199. 10
  1200. th · if:        10
  1201. ndp_v10
  1202. 10
  1203. IDEO ifLOW_R╝ theg
  1204.  = dCALL:P_    popX
  1205.     p10
  1206. 10
  1207. 10
  1208. 10
  1209. 10
  1210. 10
  1211. 10
  1212. 10
  1213. men_vi_v10
  1214. DO_FI
  1215.     leg
  1216. pt10
  1217. got10h10hvideP_10
  1218. 10
  1219. _3P_ndougendp
  1220.  
  1221.  PI
  1222.     JM:        ING AUND10hvectst(0
  1223.     JM_exiX
  1224.     pP_elayOS vll
  1225.     i_v10
  1226. h    l
  1227.  
  1228.     JMgc P_EN_exi = roP_10
  1229. 10
  1230. OS vAR_v10
  1231. 10
  1232.  MOVI_v10
  1233. LL_    ; tr
  1234. ug10
  1235. 10
  1236. EN_FITRIP_10
  1237. 10
  1238. ds
  1239.     I_v10
  1240. p
  1241.     P_10
  1242. 10
  1243.  60 dx,_v10
  1244. andP_D 6h
  1245. ;10
  1246. 10
  1247. 10
  1248. 10
  1249. e theP_D _exicode INCahOS v10
  1250. 10
  1251. D :              ;I
  1252.     p_v10
  1253.     CL
  1254.     dwahpt10
  1255. 10
  1256. DW    OF_exi10
  1257. OW
  1258. OP6h
  1259. ;10
  1260. 10
  1261. DW    OFg10
  1262. 10
  1263. lineg10
  1264. 10
  1265. DW    OF_FI10
  1266. 10
  1267. DW    OFptTING ES 10h ext_PAES 6h
  1268. ;
  1269.     push    j_v10
  1270. #
  1271. pcES ALL
  1272. col w_ES vectolumno
  1273. _v10
  1274. ugJ,ahOS vER TP_10
  1275. 10
  1276. ;SEPTS,ahptv c LI,ahLOW_R
  1277.     MOP_KIcode10
  1278. 10
  1279. KIX
  1280.     pER R        ; read
  1281. ug10
  1282. ISC_v10
  1283. L_dP_KI_FIET_CP_KIptR
  1284.     POFFSE_v10
  1285. ;
  1286. ;
  1287. s
  1288. ;
  1289.  
  1290.     jmp    r6h
  1291. ;READ_CP__ve
  1292. PUSD OLer ALL
  1293. 10
  1294. E AT_v10
  1295. 21 tendeer _exi_FIn ker OS vCX        ;ber :        L_DH_er g10
  1296. 10
  1297. 10
  1298. 10
  1299. STP_10
  1300. 10
  1301. DLP_10
  1302. 10
  1303. _isK PIcode
  1304.     Xl_q PIuged t_v10
  1305. 10
  1306. 10
  1307. @10h10
  1308. 10
  1309. 10
  1310. 10
  1311. v    IMEMEN6h
  1312. ;_mOSMEN
  1313. G    C1
  1314. MENALL
  1315. dx t.MENvect10
  1316. 10
  1317. 10
  1318. 10
  1319. pt= N_vOS vOR
  1320. P_10
  1321. :        ansi_ z_vg2
  1322.     N W_vLOW_R1
  1323. P_ ifad 10
  1324. 10
  1325. 10
  1326. 10
  1327. 10
  1328. fau(0delayax
  1329.     16(0ORT10
  1330. 10
  1331. 10
  1332. 10
  1333. 10
  1334. :[(0
  1335.     equenc
  1336.     POP    S10
  1337. 10
  1338. extend
  1339.     POP    S10
  1340. 10
  1341. nt sLoop10
  1342. T W
  1343.     POP    S10
  1344. 10
  1345. 10
  1346. 10
  1347.     poppciX
  1348.     PO
  1349.     POP    S10
  1350. 10
  1351. 10h    ; 12oop10
  1352. 10
  1353. 10
  1354. ndoNTE10
  1355. 10
  1356. 10
  1357. 10
  1358. endp
  1359.  
  1360.  aroop10
  1361. 10
  1362. 10
  1363. 10
  1364. 10
  1365. 10
  1366. 10
  1367. elay    ; 12s        ;oop10
  1368. reaos
  1369. P
  1370. ORT
  1371.     DW    OFF
  1372.     POP    Selayx
  1373. stOSEP
  1374.  
  1375.     etor
  1376. e
  1377.     JN
  1378.     JMì = B
  1379.     JNFSFFH
  1380.     POP    SEN10010
  1381. 10
  1382. ENOW
  1383.     :newritoopCOU k10
  1384. alseC e10
  1385. 10
  1386. alseAL,D10
  1387. 10
  1388. alseNTEk i    AL    li
  1389.     mo1hhiliend_ow c LO
  1390.     iad e
  1391. AV
  1392.     i    ; 12        ;D
  1393.     POP    SD delayint10 =
  1394.     iORTPUSH    
  1395.     POP    SD x
  1396. DI    
  1397.     POP    SD 
  1398.     eght ntrbuf 
  1399.     JM10
  1400. P  buf FS0_v'
  1401. buf 100emen ofbuf OW
  1402.     si    ct_buf pci¢_Aoop10
  1403.  
  1404.  MSAL,DWIN
  1405.     POP    SOP    NTEATTRIB
  1406.     POP    SOP    
  1407.     moue E M MSend_ Nbl,1l
  1408. ad ct v_oop10
  1409.     Aall rl
  1410. delayER TR [l
  1411. ORT10
  1412. is al
  1413. x
  1414. 10
  1415. 10
  1416. 10
  1417. 10
  1418. 10
  1419. 10
  1420. 10
  1421. 10
  1422. 10
  1423. 10
  1424. 10
  1425. 10
  1426. 10
  1427. 10
  1428. @AL,D10
  1429. 10
  1430. 10
  1431. 10
  1432. 10
  1433. 10
  1434. 10
  1435. 10
  1436. 10
  1437. 10
  1438. 10
  1439. 10
  1440. 10
  1441. 10
  1442. 10
  1443. 10
  1444. 10
  1445. 10
  1446. 10
  1447. 10
  1448. 10
  1449. 10
  1450. 10
  1451. 10
  1452. 10
  1453. 10
  1454. 10
  1455. 10
  1456.  kDW    OF_ve╜10
  1457. 10
  1458. 10
  1459. 10
  1460. 10
  1461. 10
  1462. 10
  1463. 10
  1464.     ;LN
  1465.     _cuORT
  1466. L
  1467.     POP    S,rx
  1468.  
  1469. ; c
  1470.     POP    S10
  1471. 10
  1472. 10
  1473. 10
  1474. 10
  1475. 10
  1476. 10
  1477. 10
  1478. 10
  1479. 10
  1480. 10
  1481. 10
  1482. 10
  1483. 10
  1484. 10
  1485. 10
  1486. 10
  1487. 10
  1488. 10
  1489. 10
  1490. 10
  1491. 10
  1492. 10
  1493. 10
  1494. 10
  1495. 10
  1496. 10
  1497. 10
  1498. 10
  1499. 10
  1500. m:
  1501. H
  1502.     Xoop10
  1503. 10
  1504.  
  1505.     mov poop10
  1506. ush    e
  1507.     POP    S@end_10
  1508. puoopad  es
  1509.  choop    ; 12
  1510. ;
  1511. ;    likoopdelay10
  1512. 10
  1513. 10
  1514. ORT_init
  1515.     POP    S10
  1516. 10
  1517. the chh
  1518.     doop10
  1519.   SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS0
  1520. 10
  1521. 10
  1522. ela┴
  1523. ;
  1524. D10
  1525. 7,┴ec COL
  1526. D O┴v iERMEM┴o i10
  1527. cle
  1528. FF_exiiiiiiiiipopLEendpret
  1529. e
  1530. ÿh,aO HP
  1531. (HC    AHURSOR
  1532. uph
  1533. mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmdodatrnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn0
  1534. 10
  1535. 10
  1536. ndpiniTI        dx,aycinifot 1    OFFos_10
  1537. ,0
  1538. DI]iniz10
  1539. 10
  1540. elayr
  1541. _CURR    DSAR
  1542. ;
  1543. DAV drARec v_
  1544. aARv ic CTYARo i chURos_10
  1545. OS v
  1546. ;
  1547. eTELE
  1548. i
  1549.     rTEfo kDW    OFEN(Hc_rFOTEup  alH
  1550. HI_da theeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeelseTO B= ADDll_HI_ec  kDW    OFalsefods
  1551.     )
  1552. HI_1HANG_looHI_zhrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r
  1553.  
  1554. pQctiv
  1555. ;
  1556. Dbl,aTE_Activec M
  1557. SINctivv iBMOWctivo i10
  1558. 6h
  1559.     moFF:        scro    moLEweÄ    moÿ10
  1560. 10
  1561. DW    OF(H10
  1562.  
  1563. ;
  1564. ; rDOW
  1565. upqueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeP    da    ofA         ; tTO Bdh,os_10
  1566. 10
  1567. ET A    ; tfoby def    ; t1theblos_10
  1568. S
  1569.     Mree_CUr
  1570. 10
  1571.  
  1572. ;
  1573. be_CU
  1574. ;
  1575. DT REEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE0
  1576. 10
  1577. 10
  1578. KH_CUv iD
  1579.     
  1580. _CUo i- ue
  1581. UNDFFgl,0UNDLEteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0
  1582. 10
  1583. ▀ BUND(H10
  1584. 10
  1585. 10
  1586. 10
  1587. 10
  1588. 10
  1589. }ON10
  1590. 10
  1591. 10
  1592. 10
  1593. 10
  1594. 10
  1595. 10
  1596.  /olumn ds UMN 4ugn AUMN
  1597.     rDL =
  1598. ;
  1599. tlinedeo;SEet
  1600. UMNntryor a
  1601. ;
  1602. tlineDO_F
  1603.     MO
  1604. ;
  1605. tKI lBYds
  1606.     enablen stER RevenableIRATTRIB
  1607. ;
  1608. tKIDDL_d Fenable   10
  1609. curspoenablendpR
  1610.     Pif ndx,w 0;
  1611. ;
  1612. ;
  1613. t}curren    R10
  1614. ╕√ lo10
  1615. _FIILNSCR_
  1616.     r10
  1617. h        ;ush c10
  1618. 10
  1619. si NSCR_ntry10
  1620. hancNSCR_DO_FX
  1621.     POlliush c10
  1622. DLHANGush c10
  1623. 10
  1624. 2hush c10
  1625. s         re,CH
  1626. DDe
  1627. ;
  1628. t INTO   10
  1629. 0
  1630. r,CH
  1631. ndp, CHotush c10
  1632. v    ADC0 ISW    ues 
  1633. ;
  1634. t@ e_G    C    gush c e_dx fe0 I
  1635.     popc
  1636.  
  1637. ;
  1638. t10
  1639.  4ptWush c
  1640.     rOR
  1641. CURREush cdeo10
  1642. 10
  1643. 10
  1644. ntry2
  1645.     _int10ush cDO_F10
  1646. 10
  1647. 10
  1648. 10
  1649. 10
  1650. _m devallTTYYYYcSDO10
  1651. ax
  1652.     
  1653. s10
  1654. 10
  1655. t        
  1656.     M devr
  1657. H
  1658.     SSOR devADquencöSDO10
  1659. extend_VIDRct ant s╧SDO10
  1660. T WurnDRCROLLI
  1661.     PUSH OFFSETSDO10
  1662. ON10
  1663. 10
  1664. 10
  1665. 10
  1666. 10
  1667. 10
  1668. 10
  1669.     DX SDO10
  1670. 10
  1671. P1_3BU10
  1672.  
  1673.     dSDO10
  1674. "l
  1675. s10
  1676. 10
  1677. E IN INCr
  1678. 10
  1679. rit INCADDRreale    w INCs s
  1680.     DW    OFFv    aSDO10
  1681.  ch
  1682. s10
  1683. 10
  1684. 10
  1685. IBSDO10
  1686. ì3
  1687. TINct a10
  1688.  andTINNO10
  1689.  /10
  1690. 10
  1691. 10
  1692. 10
  1693. 10
  1694. SUB    5 ndedYPE
  1695.  
  1696. s}k i_ac5 BU1hcl
  1697. 5 pub10
  1698. DXRT CBle
  1699.  
  1700. s}drSDO10
  1701. 10
  1702.  /DI    
  1703. sDW    OF        ; cght s.OREahINTNS    NSDO10
  1704. 10
  1705. 10
  1706. DW    OFNO10
  1707. >ORECROLLI10
  1708. 10
  1709. DW    OFY H10
  1710.  0I
  1711.     pBU lo10
  1712. 10
  1713.  
  1714.     DW    OFFSE    SC        ; cC
  1715. res    SCBUue PASSDO10
  1716.  N
  1717.     pop    I
  1718.     pBlct M
  1719. I
  1720.     pall10
  1721. 10
  1722. lineADDR10
  1723. 10
  1724. lines s_FI
  1725. s} lo10
  1726. off╤ mect a10
  1727. 10
  1728. 10
  1729. 10
  1730. 10
  1731. 10
  1732. KICROLLI10
  1733. 10
  1734. }10
  1735.  / lo10
  1736. 10
  1737. wax
  1738. SDO10
  1739. 10
  1740. 10
  1741. _vepub10
  1742. rc
  1743.     dwBl10
  1744. 10
  1745. 10
  1746. 10
  1747.  1
  1748.     dwADDR    ;LN SDO10
  1749. TE CAT        ; c
  1750. ; csab
  1751.     dwADSTDI    SDO10
  1752. ati
  1753. s INTOct avecUNCTATNO10
  1754. 10
  1755. 10
  1756. 10
  1757.  
  1758.     mov d
  1759. s INTOY H10
  1760.  /ON@ndedm:
  1761.  
  1762. s10
  1763. 10
  1764. 10
  1765. e uSDO10
  1766. _qCH
  1767.  loBl es
  1768.  
  1769. s10
  1770. all
  1771. ;
  1772. ;    
  1773. s10
  1774. ADDR10
  1775.  /10
  1776. 10
  1777. 10
  1778. r
  1779. the ch[SDOAD10
  1780. 10
  1781. 10
  1782. 10
  1783.  lo10
  1784. LL     LL        ;ABRCOL
  1785. ena        ;APPERCOU}AI 0
  1786. sp10
  1787. 1hCH
  1788. FAER
  1789. h,a, iO DnearC    AHCOU}10
  1790.  
  1791. ;
  1792. sp10
  1793. ONndocl
  1794.  
  1795. COUelayOP_CURRdel
  1796.     mX
  1797.     10
  1798. ng A
  1799.     mBRv_COU10
  1800. 10
  1801. 10
  1802.  /;
  1803.     domar
  1804.  
  1805. 10
  1806. 10
  1807. 10
  1808. 10
  1809. 10
  1810. SEGdomnearc_rt csp10
  1811. 10
  1812. 10
  1813. 10
  1814. 10
  1815.  theCOU}10
  1816. 10
  1817. alsec    d10
  1818. 10
  1819. D         ;COds
  1820.     COUalse        ;COHANGILLsp10
  1821. hrQU
  1822.     pusOP
  1823. pbx
  1824.     pusX
  1825.     10
  1826. 10
  1827. D BRM
  1828. COU}10
  1829.  
  1830.     pop    dsp10
  1831. 10
  1832. 6h
  1833.  
  1834.     m.
  1835. ;:        COU}10
  1836.  
  1837.     DW    OFFSE
  1838.     mER
  1839.  WICOU10
  1840. 10
  1841.   4ump
  1842.     mall WINCH
  1843. ON10
  1844. 10
  1845. SHCOU10
  1846. 10
  1847. theh    ;mp s        ;CO10
  1848.  
  1849.     jmp    remp scl
  1850. S
  1851.     M IT0 HOP10
  1852.  
  1853. ;
  1854. be0 HX
  1855.     T RExtesp10
  1856. 10
  1857. KHsp10
  1858. D
  1859. COUlineERRO10
  1860. O sp10
  1861. 10
  1862. 10
  1863. KIar
  1864.  
  1865. ATTRIBCOU}mptS L = cnearC_2MP  L = call ead_1
  1866. ;
  1867.     PU    offseLT  4
  1868.     PUVIDEO10
  1869. 10
  1870. _vec    d0COU_veall IF OFFS sa10
  1871.  /CgetsX
  1872.     POR^getsBRS:pCOU,rPP10
  1873.  /e thei,10
  1874. 10
  1875. OF i,10
  1876. 10
  1877. 10
  1878. ,D    jE
  1879. Wpos
  1880. ;    BRN
  1881. 10
  1882. 10
  1883. 10
  1884. 10
  1885. 10
  1886. quenON}10
  1887. 10
  1888. 10
  1889. 10
  1890. 10
  1891. SUB    W    O10
  1892. YPE
  1893. .7W    O10
  1894.     AHCALL    F} = a.
  1895. bnt    mptDH.
  1896. bbelllARA.
  1897. b
  1898. ;
  1899. ptinrow_t.
  1900. bOP    AWRITE_A,cse
  1901. 10
  1902. e =ERTse
  1903. 10
  1904. es
  1905.     popPOG     DPORffh
  1906. se
  1907. 10
  1908. S:pE:G    SI,TE CulatG    etnARIuch INTOAND LOW_Rs_SH C╚CHARAReSH CRIB10
  1909. itese
  1910. 10
  1911. s     ,se
  1912. 10
  1913. 10
  1914. msorts r_ead_se
  1915. 10
  1916. ROWS Tinitortbell:ble_pcort
  1917. ;
  1918. pTTR uch@OP    Ah,81uch@dx,c10
  1919.     popse
  1920. 10
  1921. int    1 CHAse
  1922. 10
  1923. 5
  1924. uch10
  1925. CH,Cs ofuch10
  1926. SI,T Spop    se
  1927. 10
  1928. ndo      bq_    b = d_inq_    OFFth         ; co10
  1929. 10
  1930. Bh H = N10
  1931.  = arneq_e_fals10
  1932. oinOFFSEDS
  1933. CALL:        ; co    pop0h         HAse H = N10
  1934. dxXCHOFFSEB                                                                                                             en        ;SOFFSERY DO_FI        ; co    pop
  1935. ;
  1936.       dOV    dendp
  1937.  
  1938.  
  1939.     jmp    rvidev iH = N10
  1940. _3PPendp
  1941.  
  1942. b        OFFSE        ; co10
  1943. 10
  1944. 10
  1945. 10
  1946. 10
  1947. 10
  1948. 10
  1949. ; 15op    b10
  1950. 10
  1951. 10
  1952. 10
  1953. ll        ; co10
  1954. 10
  1955. 10
  1956. hanH = N10
  1957. 10
  1958. 10
  1959. 10
  1960. 10
  1961.  = ro the H = N10
  1962. eqmpts
  1963. ;
  1964. 0h        10
  1965.  /FILLdl10
  1966.  /C e:
  1967.     call lo10
  1968. 10
  1969.  /10
  1970. 10
  1971. 10
  1972. 10
  1973. 10
  1974. 10
  1975.  INTODS
  1976. DLWRITE_ASH D0h        _iscurreSH DC    C
  1977.     Xic H = N10
  1978. eX,SH DRY u,0fSH D
  1979. ;
  1980. , CH        ; co@
  1981.     jmp    rv    RDSUBRTues         ; co10
  1982. 10
  1983. G    CH = #SUBR
  1984.     jldx disablSUBRdl10
  1985. }H = N    bptst H = N    OFF10
  1986. 10
  1987. 10
  1988. 10
  1989. ansi_nH = Nme10
  1990. 10
  1991. 10
  1992. e_fals1
  1993.  
  1994.     PT 10
  1995. _qe =T 10
  1996. TTYthT 10
  1997. ax
  1998.     leatendeNO E10
  1999. 10
  2000. 10
  2001. 10
  2002. 10
  2003. 10
  2004. 10
  2005. 10
  2006. 10
  2007. 10
  2008. 10
  2009. 10
  2010. extendmi curr10
  2011. 10
  2012. 10
  2013. 10
  2014. 10
  2015. 10
  2016.     popn of 
  2017.     PUSH wr T  X
  2018.     PO
  2019. pc_ING Ales10
  2020. 10
  2021. ndoIDE10
  2022. 10
  2023. 10
  2024. 10
  2025. 10
  2026. 10
  2027. 10
  2028. 10
  2029. endp
  2030.  
  2031. D AT10
  2032. 10
  2033. 10
  2034. 10
  2035. 10
  2036. 10
  2037. 10
  2038. 10
  2039. 10
  2040. 10
  2041.  ah,7T 10
  2042. 10
  2043. z tT 10
  2044. 10
  2045. 10
  2046. elayσ10
  2047. 10
  2048. 10
  2049. 10
  2050. 10
  2051. IBMP Ier 10
  2052. 10
  2053. EN    E10
  2054. e.T 10
  2055. 10
  2056. 10
  2057. 10
  2058. 10
  2059. 10
  2060. 10
  2061. ENT  int10ROMT 10
  2062. 6h
  2063. ;[diT 10
  2064. YPE
  2065. D AT10
  2066. 10
  2067. 10
  2068. hT 10
  2069. 10
  2070. ear        ;b
  2071.     dow ccont        ;bE Ie
  2072. D AT10
  2073. 10
  2074.         ;D2        ;b    E10
  2075. 10
  2076. 10
  2077. 10
  2078. PUSH    h
  2079. ;
  2080.         ;bσDI    WRITE_CT 10
  2081. :        equeT 10
  2082. INTD ATKI PI0_vconCROLL
  2083. ;10
  2084. >CROLLn of si            ; iCROLLT  ¢pT 10
  2085.  
  2086. ng b
  2087.  
  2088. ; IDEWINwax
  2089.  
  2090.  
  2091. ; proC
  2092.     equT 10
  2093. ue fh,
  2094.  
  2095. ; ON  Nte iH_E Ict S:pT 10
  2096.     A colH_    EER TTTlH_NO ExoD ATlineσit:
  2097. LEFTH_
  2098.     dv c
  2099.     push    .
  2100. ;
  2101. er offR T 10
  2102. IN_3.
  2103. ;
  2104.  
  2105. ; RETREN.
  2106. ;
  2107. n of 10
  2108. read_a.
  2109. ;
  2110. T  h eenable_V,lesALL
  2111.     dxV,IDEyboD AT_vepro000
  2112.     OV,h
  2113.     x10 es:T 10
  2114. 0NV├E IingsTE C├ arbx,bno ├    E10
  2115.     DI├NO E
  2116. L
  2117. ;
  2118.     pu├σ
  2119. ; c¡├
  2120.     dSTD AT INTOer atiUB    E PcurrvecMOV
  2121. E P
  2122. ;end_eH,bE Pn of 10
  2123. ROUE PT      AHAX,_3:lesvectD AT@IDEm:
  2124. :
  2125.     call    _3:pro18h0 f_3:h
  2126.     xush    eD AT@ON 
  2127. ;
  2128. dROW T E I10
  2129. ndoT  ar
  2130. ;
  2131. ;    _SCT     EOW
  2132. p
  2133. T NO E_init ORT 10
  2134. the chcomT 
  2135.     d  SHz} PIE INALL    OR    DDD0
  2136. LL     rOR    Dbeep10
  2137. _cnOR    Dct tER_fct_FI10
  2138. AImaxem: _exi«emnf10
  2139. doem
  2140.     Oh,aOW    em    axC    AHpoemmov h
  2141. mHzndoIF trnLOW_R,0
  2142.  = rowiniDO_F,0
  2143.  H10
  2144. T O,0
  2145. write_ct 1e_fals,0
  2146. nu,0
  2147. 29,0
  2148. ;    10
  2149. mmOR TY PI_CURR"[OR TYYY0
  2150. AV0h
  2151. OR TYbeepv_Hzelayct tc ablOR TY    ;R chNEX,bx: OS vHzENnf
  2152. iCS
  2153. FI10
  2154. A     Θ,bx    axc_rseq,bxmov   alHIGH_RFI10
  2155.  theCHARAK = row= ADDsaveFI10
  2156. W   ar Kwrite_cds
  2157.     dinKnuHANGwrite_c_K
  2158. ;    10
  2159. es:[kb_ PI
  2160. psekb___0
  2161. bl,a:
  2162.     cakb_beep10
  2163. SI
  2164. kb_ct tBMLOWkb_    ;Rit        ;ABINI: :        HzDW    OFnfweILL:INI
  2165.     O WI
  2166. IINI    ax10
  2167.     pop    sINImov quecall
  2168. l_qIF     ofRIl_q = row10
  2169. ╖l_q HSH ANDl_qwrite_cby T COl_qnu10
  2170. DW    OF10
  2171. COUS
  2172.     M_DOT al,d PI,asaval,ddd0
  2173. T REHz10
  2174. 10
  2175. 10
  2176. KHFI10
  2177. 10
  2178.  mFI10
  2179. 10
  2180. 10
  2181. 10
  2182. 10
  2183. 10
  2184. 10
  2185. 10
  2186. 10
  2187. 10
  2188. 10
  2189. 10
  2190. 10
  2191. 10
  2192. 10
  2193. KI    ax10
  2194. 10
  2195. KImov 10
  2196. DUd tIF LTHz_vemov mptT  ;d t Hlariad twrite_ctin400d tnu10
  2197. m eFI10
  2198. e =
  2199.     mov dFI10
  2200. 10
  2201.     DIFICOU kw 0
  2202. FI10
  2203. S:pUBFI10
  2204. atid Iê    ;RARI fFI10
  2205. LOW_RHz INTOnfCHARAar
  2206. FI10
  2207. RIG    ACOD    axs     cyCODmov G    AHz@IF r_Hz10
  2208. IF ROWS Th
  2209.     dwUL H: ,FI10
  2210. TTR usedULnuh,81Hz@
  2211. ;    10
  2212.     popFI PIint    10_VFIII0
  2213. 10
  2214. DW    OFFIbeep10
  2215. KIFI10
  2216. T Sll (FI10
  2217. ndoHz}COLOR10
  2218. 10
  2219. }DI]th 
  2220.     MOV    Bto ²    O = at w²2910
  2221. oin 0
  2222.     D;CCALL:r_ 0
  2223.     Deci HAfor f    pop
  2224. ;
  2225. ; dx6h
  2226.  0
  2227.     Dout
  2228. men90:
  2229.     pop10
  2230. DO_FI∞ 0
  2231.     Dorm      d= "lMENvideo i"lmov I10
  2232. cl
  2233. "luc    OFFSEfor fndoº,0
  2234. for fndoorm10
  2235. ; 15
  2236.     pop10
  2237. X
  2238.     pfor f10
  2239. 10
  2240. llfor felay
  2241.     MOV    h    for f10
  2242. 10
  2243. torrm
  2244.  tou29 = rofor f10
  2245. 10
  2246. eqfor f10
  2247. 10
  2248. 10
  2249. 10
  2250. 10
  2251. 10
  2252. 10
  2253.  
  2254.     CALIMEout
  2255. of rolu
  2256.     pop10
  2257. 10
  2258. 10
  2259. 10
  2260. 10
  2261. E HAL
  2262.  
  2263.     pop10
  2264. 10
  2265. IS t    ;mov I 60 d *t    ;ucandfor falseº10
  2266. ebt    ;h
  2267. c10
  2268. 10
  2269. D MEN10
  2270. dpIMDI]10
  2271. = H
  2272.     pop10
  2273. 10
  2274. T RIM    O    CL
  2275.     MOV
  2276.     pop10
  2277. 10
  2278. 10
  2279. 10
  2280. 10
  2281. OF :
  2282.     pop10
  2283. wefor fDW    OFuc10
  2284. 10
  2285. EN_v avfor fDW    OFt MrandendeOSormTINGfor f10
  2286. 10
  2287. 10
  2288. ±elmov I
  2289.     pushACKeluc10
  2290. 10
  2291. 10
  2292. 10
  2293. thefor fOP    orm10
  2294. s of
  2295.     pop10
  2296. 10
  2297. RN
  2298. ;
  2299. bDI]DL =for fline
  2300.     MOV    10
  2301. 10
  2302. line    O10
  2303. ll)
  2304.     pop10
  2305. 10
  2306. 10
  2307. KIMENBYfor fKIDI]10
  2308. cou1
  2309.  
  2310. ;
  2311. ; 10
  2312. ISC1
  2313. out
  2314. 10
  2315. ble_p1
  2316. t MET_Ca 1
  2317. ormR
  2318.     Pfor f10
  2319. 10
  2320. 10
  2321. 10
  2322. 10
  2323. 10
  2324. READ_C ah
  2325.     pop10
  2326. 21 psmsdº    J= ADmsdh
  2327. c10
  2328. EL    POCOLORPORfor f,rDI]10
  2329. 10
  2330. 10
  2331. 10
  2332. 10
  2333. si 
  2334.     pop10
  2335. 10
  2336. hanc    PO29rando,At.;C10
  2337. the cht.eci_is
  2338.     PUSt.
  2339. ;
  2340. ; 10
  2341. OR    DHt.out
  2342. efun
  2343.     pop10
  2344. uus
  2345.     pop10
  2346. ues y
  2347.     pop10
  2348. v    buf_c nmov I10
  2349. ,C
  2350.     pop10
  2351. 10
  2352. 10
  2353. @ºdx IA
  2354.     pop10
  2355. 10
  2356. }
  2357.     popCOLORptoffse
  2358.     popDI]10
  2359. 10
  2360. 10
  2361.  
  2362.     MOV    ansi_r
  2363.     
  2364.     pop    O2
  2365.     JMP
  2366.     pop10
  2367.   S10
  2368.  
  2369.     pop10
  2370. _qreturn gdeo_
  2371.     cmp10
  2372. 10
  2373. ,rble:ax
  2374.     10
  2375. }hic10
  2376. 10
  2377. 10
  2378. 10
  2379. H
  2380.     S:[P_10
  2381. 10
  2382. 10
  2383.     pop_vextend0h
  2384.  calquen10
  2385. 10
  2386.     pop    ;A10
  2387. 10
  2388. ndo
  2389.     cmp
  2390.     PUSH S     calT:    X
  2391.     PO        ;actitr10h10
  2392. ndo pro kDW    OFndo axlatio10
  2393. ndo extendendp
  2394.  
  2395.  
  2396.     dP_10
  2397. 10
  2398. rit= N    d─int    1= N
  2399.     cmp10
  2400. 10
  2401. 10
  2402. rea10
  2403. 10
  2404. 10
  2405. 10
  2406. 10
  2407. 10
  2408. 10
  2409. 10
  2410.     DX P_10
  2411. tor10
  2412. EN
  2413.     cmp10
  2414. 10
  2415. 10
  2416. 10
  2417. FFH10
  2418. 10
  2419. 10
  2420. 10
  2421. 10
  2422. 10
  2423. 10
  2424. 10
  2425. e.cs
  2426. T:    z 10
  2427. alsetr6h
  2428. ;SUB        alr o10
  2429. AH P_10
  2430. 10
  2431. 10
  2432. DW    OFT:    10
  2433. 10
  2434. alseal,0ow c10
  2435. 10
  2436. 10
  2437. 10
  2438. 10
  2439. 10
  2440. 10
  2441. 10
  2442. 10
  2443. D  pro10
  2444. 10
  2445. 10
  2446. 10
  2447. 10
  2448. 10
  2449. 10
  2450. 10
  2451. 10
  2452. 10
  2453. 10
  2454. 10
  2455. 10
  2456. 10
  2457. 10
  2458. 10
  2459. INT10
  2460. DW    OFROLL0_vAHASC    ;Aeme>ASCk10
  2461. 10
  2462. OP        d¢
  2463. ;
  2464. ; r    ;tr10
  2465. 10
  2466. OP    r oWIN
  2467.     DW    OFFSE    ; ax10
  2468. RO    ; extendue of    ;T:    10
  2469. DE'P_10
  2470. ct s of zr o10
  2471. T IS z proER Tis aP_10
  2472. 10
  2473. 10
  2474. lineROLL10
  2475.  
  2476.     cm zinitiv cax    al
  2477. quenoff10
  2478. 10
  2479. 10
  2480. IN_TION P_10
  2481.  RETendp
  2482. al
  2483. k10
  2484. read_aal
  2485. T:    10
  2486. 10
  2487. _ve axALL
  2488. 10
  2489. _ver o10
  2490. 10
  2491. 10
  2492. 10
  2493. 10
  2494. wax
  2495. P_10
  2496. TE C?
  2497.     lal,00rcN Wtr10
  2498.      ;BP_10
  2499. 10
  2500. 10
  2501. ,r pro    ;L    DIN Whic
  2502. L10
  2503. 10
  2504. 10
  2505. 10
  2506. E PT= NCT10
  2507. 44P_10
  2508. OR
  2509. 85P_10
  2510. vec10
  2511. 10
  2512. 10
  2513. 10
  2514. 10
  2515.  INTOk
  2516.     mov dROUⁿT:        AH;
  2517.     mdi,trvect byP_10
  2518. m:
  2519. NG di, ax18hre P_COU ke udi,al,010
  2520. puP_    d es
  2521. ndoP_
  2522.     cmp
  2523. ;
  2524. ;    10
  2525. 10
  2526. 10
  2527. OW
  2528. ten
  2529.     CMhic_init_veP_ROLLthe ch@P_initi# FA
  2530.     CM10
  2531.  
  2532.     iT N
  2533.     DE00; pe r
  2534.     DEsitrib                  CM10
  2535. CT ON10
  2536. 10
  2537. soleROW
  2538.     CM10
  2539. C eON    popL    d_coLOW INT1  2olV_AINT1cnreadON10
  2540. 10
  2541. A Squ  
  2542.     j = d
  2543.     CM10
  2544. ARONndo
  2545.     dw    
  2546.     mata,
  2547.     CM10
  2548. 10
  2549.  
  2550. ;
  2551.     CM10
  2552. OR TYON10
  2553. 10
  2554.  HEONelay(0MP    BON10
  2555. 10
  2556. 10
  2557. 10
  2558. elaysitM B
  2559.     CM10
  2560. 10
  2561.     DX 
  2562.     CM10
  2563. 10
  2564. 10
  2565. 10
  2566. COU kz t
  2567.     CM10
  2568. 10
  2569. 10
  2570. 10
  2571. 10
  2572. E
  2573.     c fnccnesCL=ncPUT10
  2574. SUB+2≥; 83th +2ons
  2575. ╠vid
  2576.     CM10
  2577. ng tSET W+2OV    b
  2578.     DW    ld+216hFASONalse; 1510
  2579. 10
  2580. 10
  2581. 10
  2582. _P80set 00;dw 0
  2583. ON10
  2584. 10
  2585. FUNd_c
  2586.     CM10
  2587. 10
  2588. COLSset # OF t fts
  2589.     cald_d10
  2590. :
  2591.     mov
  2592.     calL    d)
  2593.     ON10
  2594. 10
  2595. nerONDW    OFcn]    ON10
  2596. 10
  2597.  
  2598. ;
  2599.     ar a16≥s oscree
  2600.     CM10
  2601. 10
  2602. 10
  2603. OP    sitING UONOP    OV    b ou;RI1616h10
  2604.  ax,16; 15      ONline(0solONline00;    ds
  2605. AL
  2606.     CM10
  2607. 10
  2608. 10
  2609. 10
  2610. 10
  2611. ]
  2612. ONline# OF LL rn  0fd_dommoMO
  2613.     CM10
  2614. LEFT ON10
  2615. 10
  2616. nt ese 
  2617.     CM10
  2618.     dx
  2619. ONKIPUT  Cp
  2620. ;
  2621. ro
  2622. ≥    S = aro
  2623. ons
  2624. WIw vro
  2625.  
  2626.     dw    ¿ON_veOV    bTA pctro
  2627. 16hpc_bliro
  2628. ; 1510
  2629. 10
  2630. 10
  2631. 10
  2632. 10
  2633. 10
  2634. ,r00;W TON10
  2635. 10
  2636. 10
  2637. gon
  2638. CTct,In
  2639. # OF     ; gON INTOd_dvedON INTOL    d10
  2640. SEGon e10
  2641. DSba
  2642.     CM10
  2643. HLsh    
  2644.     CM10
  2645. REM_t:
  2646.     m≥int 1ON10
  2647. 10
  2648. 10
  2649. 10
  2650. 10
  2651. 10
  2652.  
  2653. ;
  2654. bON10
  2655. 10
  2656. ,BSTC
  2657.     CM10
  2658. 84
  2659.  
  2660. ; W:
  2661.     m; 1510
  2662.     pop
  2663.     CM(0al_ency
  2664.     CM00;10
  2665. DW    OF
  2666.     CMOV    b10
  2667. KI
  2668.     CM10
  2669. 10
  2670. 10
  2671. 10
  2672. # OF elayON}≈10
  2673. d inty9TIODon e10
  2674. 10
  2675. LOWEtyh d to TERtyW_R10
  2676.  
  2677.     e 60ent:CT CALL: 60B10
  2678.  en 60fct:ax
  2679. y: 60AlV        AL,on e10
  2680. ds
  2681.     equ  60mm SUBRg b─ä10
  2682. 10
  2683. ndobee INCk ndoALL    RJAND on e10
  2684. n kk ndo9= Nk 10
  2685. 10
  2686. 10
  2687. 10
  2688. 10
  2689. 10
  2690. SUProw,on e10
  2691. 10
  2692. hanon e10
  2693. 10
  2694. 10
  2695. EN910
  2696. ╢mov    ent:n:k ENB
  2697. ;
  2698. ePAGmov    fct:scroEon e10
  2699. 10
  2700. 10
  2701. EN, pO Hjg:neaent:10
  2702. 10
  2703. 10
  2704. 10
  2705. 10
  2706. IS on e10
  2707. 10
  2708. hon e10
  2709. FASk 10
  2710. 10
  2711. 10
  2712. 10
  2713. 10
  2714. 10
  2715. 10
  2716. 10
  2717. 10
  2718. 10
  2719. 10
  2720. 10
  2721. 10
  2722. 10
  2723. 10
  2724. 10
  2725. 10
  2726. 10
  2727. 10
  2728. 10
  2729. D h d    JMk D W_RUNCTsh bLent:ID_k 10
  2730. 10
  2731. 10
  2732. ,DLfct:10
  2733. 10
  2734. 10
  2735. 10
  2736. ah,113L, p= 8LOR Lmmp    wop
  2737. on e10
  2738. DATAp(atubeeh
  2739. wINCatuALL    R10
  2740.  
  2741. pciatu
  2742. ;
  2743.     , co; eatu9V    ARR21h
  2744. ≈10
  2745. 10
  2746. 10
  2747. 10
  2748. 10
  2749. 10
  2750. KImm proc ur 21h
  2751. h dr.ow,21h
  2752. W_Ru     AXuse ent:10
  2753. _inituse BREAD_ 6use fct:ommo
  2754.     PUuse Al10
  2755. ble_puse , ps_ORDon e10
  2756. EAD_infoon e10
  2757. 10
  2758. G    DAUbee10
  2759. fasAUALL    R    dwiveron e10
  2760. 10
  2761. E ATAU9st 1h
  2762. ≈x
  2763. k ,rnd[diof lon e10
  2764. ng b    i1h
  2765. h d10
  2766. hanc1h
  2767. W_R10
  2768. 10
  2769.  INTOent:«DO_FIon e10
  2770. 10
  2771. 2hon e10
  2772. 10
  2773. 10
  2774. 10
  2775. 10
  2776. 10
  2777. 10
  2778. 10
  2779. 10
  2780. ta k  INTOmm10
  2781. 10
  2782. 10
  2783. 10
  2784. 10
  2785. b_r
  2786. cbeefct_CURon e10
  2787. esek 10
  2788. 10
  2789. ,Bk 10
  2790. 10
  2791. offsek 10
  2792. 10
  2793. 84UNCon endSUB    k 10
  2794. 10
  2795. ed fk 10
  2796. h d10
  2797. ,ron eW_R byk on e10
  2798. ≤      dH        _CURR;
  2799.     t_lpH        
  2800. p10
  2801. return gH        ,aMO.
  2802. ;    H        es
  2803.     popOR
  2804. HH        int    1    CAP_10
  2805. 10
  2806. 10
  2807. 10
  2808.     popp
  2809.     10
  2810. curso
  2811.     cmp10
  2812.  procUMë;
  2813. ;
  2814. readINGëv    10
  2815.         ;X
  2816.     pextend
  2817.     JM
  2818.     JMX
  2819.     pì
  2820. ;
  2821. ; extP_10
  2822. 10
  2823. ffh P_ndooff10
  2824.  
  2825.     dX
  2826.     pati tou_v    ; 12E IN10
  2827. int    1    ; 12_CURRn 8li    ; 12
  2828. py_P_10
  2829. 10
  2830. C_cATTRI    ; 12v    10
  2831. 10
  2832. 10
  2833. 10
  2834. 10
  2835. 10
  2836. 10
  2837. 10
  2838. ve,eTE
  2839.     cmp10
  2840.  exteP_10
  2841. 10
  2842. ll dP_10
  2843. 10
  2844. nt
  2845. P_ENv    IV√n stextendFS
  2846. ;
  2847. ; ext
  2848.     cmp10
  2849.  
  2850.     JSt.
  2851.  
  2852.     cmp10
  2853. r iUMNn stoff_HNSCR_
  2854.     cmp10
  2855. 10
  2856. DXallextend10
  2857. dpall_CURR posP_D 
  2858. p10
  2859. 10
  2860. D ,a10
  2861. 10
  2862. D es
  2863.     pop10
  2864. 10
  2865. D int    110
  2866.  
  2867.     DW    OFFSEVIDEOvideSCdomVIDEOp
  2868.     _PP_DW    OF ext,3
  2869. L = cVIDEO;
  2870. ;
  2871. 10
  2872.  
  2873.     pop    sVIDEOv    
  2874.     D
  2875. W
  2876.     cmp10
  2877. 100P_OP    ì10
  2878. rd SI
  2879. 10
  2880. ; sev_■offds
  2881. P_lineINT reRN
  2882. uptE INpe    OFFSEupt_CURR ou21hupt
  2883. p10
  2884. terupt,a10
  2885.  
  2886. ;
  2887. ; ruptes
  2888.     pop
  2889.  
  2890. extenduptint    1URRr lnt    vide
  2891.     jmerr
  2892.     cmp10
  2893. reset,Lnt     extay entry:nt    ;
  2894. ;
  2895.  100SH C
  2896.     cmp10
  2897. o    q_0h        extendOW
  2898.     P__veì    ; cOFFS0h        INT  Ced 
  2899.     cmp10
  2900. A Ft    0h        ati    poH = N arE IN10
  2901. 10
  2902. ,r_CURR½P_,r
  2903. p10
  2904.     DI ar,ans V,
  2905.     cmp10
  2906. 10
  2907. 10
  2908. 10
  2909. 10
  2910.  
  2911. ;
  2912. em
  2913.     cmp10
  2914. OD,bx = rowp
  2915.     etnewINI
  2916.     cmp10
  2917. cx
  2918. b = row;
  2919. ;
  2920.  scCOD = rowv    10
  2921. 10
  2922. 10
  2923. 10
  2924. 10
  2925.  byeciì10
  2926. NG 
  2927.     cmp10
  2928.     ;#P_@off10
  2929. e ueciati
  2930.  P_10
  2931. E INrd acti
  2932.     cmp10
  2933. 10
  2934. 10
  2935. 10
  2936. 10
  2937. 10
  2938. 10
  2939. 10
  2940. ,al    c
  2941.     l
  2942.     cmp10
  2943. hardi,
  2944.     cmp10
  2945. 10
  2946. 10
  2947. 10
  2948. 10
  2949. 10
  2950. 10
  2951. 10
  2952. 10
  2953.  p
  2954.     calSI
  2955. 10
  2956. rib 0fons
  2957. al_10
  2958. exiSI
  2959. 10
  2960. 10
  2961. cleSI
  2962. 10
  2963. 10
  2964. 10
  2965.     popve,e_co
  2966.     POP    S10
  2967. 10
  2968. 10
  2969. ┤SI
  2970. 10
  2971. ell1h
  2972. BODA S
  2973.     POP    Sndo
  2974.     i
  2975.     jX
  2976.     p_CURROD10
  2977. 10
  2978. 10
  2979. 10
  2980. 10
  2981. 10
  2982. 10
  2983. 10
  2984. 10
  2985. 10
  2986. ndoME10
  2987. 10
  2988. 10
  2989. 10
  2990. 10
  2991. 10
  2992. 10
  2993. 10
  2994. 10
  2995. 10
  2996. elayZ    Nmn
  2997. MOVMP    BDATA10
  2998. ERRUSI
  2999. 10
  3000. DL
  3001.  
  3002.     POP    S10
  3003. 10
  3004. AX
  3005.     POP    SENactAL,Dn 8[Dve,e_ROW    us_[DSCE
  3006.     
  3007.     POP    SENEAD10
  3008. l_[DODy_l
  3009.     POP    S10
  3010. 10
  3011. ; 83lls        ;MP    B╠
  3012.     POP    S10
  3013. 10
  3014. 10
  3015. 10
  3016. alsesol
  3017.     DW    ar es        ;MEFASdisabs        ;al_offs
  3018.     POP    SD P
  3019. BH    
  3020.     POP    SOP    
  3021.     podw 0
  3022.  
  3023.     POP    SD DATAFUN
  3024. exSI
  3025. 10
  3026. UNCT:
  3027.     cSI
  3028. 10
  3029. t f MOVZ    N10
  3030. :
  3031.     movSI
  3032. 10
  3033. 10
  3034. 10
  3035. DW    OFSCner
  3036.     POP    SDW    OF
  3037.     jm]    waMOVOD
  3038. ;
  3039.     a
  3040.     POP    S10
  3041. 10
  3042. s oenSI
  3043. 10
  3044. buf    
  3045. ;
  3046. ; ESI
  3047. 10
  3048. ING UIOSI
  3049. 10
  3050. 10
  3051. ME os
  3052. ME10
  3053.  ax,os
  3054. al_10
  3055. 10
  3056. lineP
  3057. solall rSI
  3058. 10
  3059.     ds
  3060.  
  3061.     POP    S10
  3062. 10
  3063. avi;
  3064. ; SI
  3065. 10
  3066. 10
  3067. 10
  3068. lineble:10
  3069. ax    SI
  3070. 10
  3071.  
  3072.     moC_cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccve,e10
  3073. 10
  3074. KIDATA10
  3075. endp
  3076. SI
  3077. 10
  3078. 10
  3079. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||al__lp
  3080.     POP    S10
  3081. 10
  3082. ¿ ;INMP    BWI
  3083. pctINBH    10
  3084.  
  3085.     jmp    reINsolTA 
  3086.     POP    S_veME10
  3087. 10
  3088. _veal_d pt
  3089.     PUS
  3090.     pP
  3091. 10
  3092. 10
  3093. ,rZ    NW T RESI
  3094. 10
  3095.  
  3096.     mov    bSCRSI
  3097. 10
  3098. 10
  3099. 10
  3100. ,ral_10
  3101. 10
  3102. 10
  3103. 10
  3104. 10
  3105. har keve,eirve    SI
  3106. 10
  3107. DSSS0
  3108.  ke
  3109.     jmREMpop  keOD10
  3110. 10
  3111. @
  3112.     iint 1 = roSI
  3113. 10
  3114.  
  3115.     jmbl OSEBH    
  3116. ;
  3117. b
  3118.     POP    S@sol2f        OSEMErite
  3119.     POP    S10
  3120. 10
  3121. ed f
  3122.     POP    S10
  3123. 10
  3124. 10
  3125. 10
  3126. 10
  3127. 10
  3128. 10
  3129. 10
  3130. 10
  3131. 10
  3132. 10
  3133. KISI
  3134. 10
  3135. 10
  3136.  INTOSI
  3137. ble:elay
  3138.     DEwrit10
  3139. 10
  3140. 10
  3141. }    DSTIO
  3142.     DW
  3143.     C P10
  3144. 10
  3145. }BX10
  3146. 10
  3147. }"[10
  3148. e~10
  3149. 10
  3150.     pop[DI
  3151. ser l
  3152. eTHEax
  3153. RETURwrit10
  3154. 10
  3155.  gwrit10
  3156. ds
  3157. P
  3158. ee s SUBRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRdo
  3159.     JN10
  3160. 10
  3161. 10
  3162. 10
  3163.  INCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0
  3164. 10
  3165. JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ0
  3166. 10
  3167. 10
  3168.  
  3169. ;    writ10
  3170.  
  3171. ;  SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSlaynear
  3172.     ; 12ve,ewrit10
  3173. SUP ton 8dellayBXFILeon 8"[10
  3174. 10
  3175. 10
  3176. 10
  3177. 10
  3178. z twrit10
  3179. _ROW                                                                                                                                                                                                                                                                                    NTHE10
  3180. OR
  3181.  = Bs pl,0re 0 = Bit:10
  3182. FSE = Be sMORx
  3183. ;writ10
  3184. G CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0
  3185. 10
  3186. 10
  3187.  
  3188.     POwrit10
  3189. n Ax
  3190.     writ10
  3191. ILLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLlseddelaywriteus_near
  3192. 10
  3193. 84us_THER
  3194.  
  3195.  
  3196.  
  3197.  
  3198.  
  3199.  
  3200.  
  3201.  
  3202.  
  3203.  
  3204.  
  3205.  
  3206.  
  3207.  
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.  
  3230.  
  3231.  
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.  
  3239.  
  3240.  
  3241.  
  3242. 0
  3243. 10
  3244. 10
  3245. 10
  3246. D BX10
  3247. 10
  3248. 10
  3249. 10
  3250. UNCT_frnt:~10
  3251. OW
  3252. nt:[DDE:NDwrit10
  3253. 10
  3254. LLSnt:s p]                                                                                                                                                                                                                                                                                W    OFit:10
  3255. ; writ10
  3256. 10
  3257. 10
  3258. 10
  3259. 10
  3260. 10
  3261. ±OT
  3262.     JMPh
  3263. wX
  3264.     PUwrit10
  3265. 10
  3266. 10
  3267. 10
  3268. 10
  3269. 10
  3270.  
  3271.     ADwrit10
  3272. 10
  3273. 10
  3274. 10
  3275. 10
  3276. 10
  3277. RNwrit10
  3278. 10
  3279. 10
  3280. linedel proc MOVStestBX10
  3281. 10
  3282. KITHEu 21h
  3283.     in~loopof r    in[DREAD_fawrit10
  3284. 10
  3285. 10
  3286. KIs pTIONbo    init:10
  3287. 10
  3288. 10
  3289. 10
  3290. 10
  3291. RENT:m 2
  3292.     JN10
  3293. G    Dwrit10
  3294. 10
  3295. fasm 2 P    dwÅwrit10
  3296. 10
  3297. 10
  3298. _vedst COLUwrit10
  3299. x
  3300. nt
  3301. writ10
  3302. 10
  3303. 10
  3304. 10
  3305. 10
  3306. ng bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0
  3307. 10
  3308. 10
  3309. 10
  3310. ,r"[10
  3311. 10
  3312. 10
  3313. 10
  3314. 10
  3315. 10
  3316. 10
  3317. 10
  3318. 10
  3319. 10
  3320. 10
  3321. 10
  3322. vedANDwrit10
  3323.     movL,Lon it:ta                                INTOe skeycall = C
  3324.     JNble::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  3325.     JMPfct    PU = C Peseeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0
  3326. 10
  3327. I
  3328. sfewrit~ kDW    OF10
  3329. near
  3330.  
  3331.     eMOV    Hwrit    DSSUB    restwritdeled fffffffffffffffffffffffffffffffffffffffffffffffff0
  3332. BXH =                                                 0
  3333. "[ byyyyyyyyyyyyy
  3334.     Cffs≤E H,"s        ;;
  3335.     _enh LO10
  3336. F L, c,"EnMOal,p," ah,7OR
  3337.  
  3338. ;
  3339. t}rit    CAE_gs
  3340. liact
  3341. ;
  3342. t    popar
  3343. 10
  3344. 10
  3345.     popET 
  3346. ;
  3347. t    popOW,read
  3348. ;
  3349. ; Rgs
  3350. DS
  3351. UNCatllFUNC
  3352.     JM
  3353. ;
  3354. tndoft
  3355.  
  3356. ;
  3357. ; extct allxiffh UTE
  3358. ll, ropcurr LO10
  3359.  touquen LO10
  3360.  HEp
  3361.     SUPs        ;n 8
  3362. ;
  3363. telayC    y____SUPEnC_c pe LO10
  3364. DL
  3365. ;
  3366. t10
  3367. 10
  3368. 10
  3369. IB LO10
  3370. ve,eædw    ofar
  3371. 10
  3372. 10
  3373. ENET ll den.dw    of ah,710
  3374. 10
  3375. 10
  3376. 10
  3377. 10
  3378. 10
  3379. alseli10
  3380. SUB    AH
  3381. ft
  3382.  
  3383.     JS
  3384. ;
  3385. talseOW,10
  3386. 10
  3387. 10
  3388. 10
  3389. 10
  3390. 10
  3391. alseTEDdelay
  3392. ;
  3393. tD ffs10
  3394. 10
  3395. D s        ;R
  3396.  
  3397. ;
  3398. t10
  3399. 10
  3400. R_
  3401. ;
  3402. t10
  3403. 10
  3404. 10
  3405. 10
  3406. D  ah,7of U    AL    OW,10
  3407. W    
  3408.     CAliSC
  3409. ;
  3410. tDW    OFar
  3411. _P    OF LO10
  3412. ,3
  3413. ou
  3414.     CAOW,        ; re
  3415. ;
  3416. tDW    OFDS
  3417.  
  3418.     Dvideo LO10
  3419. 100r i┼ft
  3420. 10
  3421.  
  3422.     DW    OFFSE┼xi; s
  3423. ;
  3424. tOP    , r10
  3425. of┼TED10
  3426. DE'    AL    ffs10
  3427. s of    AL    s        ; ou
  3428. ;
  3429. tlineC    are BX LO10
  3430. 10
  3431. 10
  3432. 10
  3433. 10
  3434.  
  3435.  
  3436. eIT    AL    ritURR
  3437. ;
  3438. t10
  3439. 10
  3440. 10
  3441. 10
  3442. 10
  3443. 10
  3444. resetBI LO10
  3445. 10
  3446. 10
  3447. KIOW, 100nd_dMDS
  3448. 10
  3449. ecar eFUNCEAD
  3450. ;
  3451. t10
  3452. 10
  3453. 10
  3454. 10
  3455. _vexi  CPA LOCOU k10
  3456. 10
  3457. 10
  3458. 10
  3459. 10
  3460. ,rffsLIN
  3461. ;
  3462. t,rs        ;½
  3463. ;
  3464. t,rC    µ LO10
  3465. ns FSET hi ah,7    CAhirit10
  3466. 44D0ar
  3467. 10
  3468. 10
  3469. 10
  3470. 10
  3471. 10
  3472. 8
  3473. D0ET 10
  3474. sibdisabFUNC scMYD0DS
  3475. _ibs LO10
  3476. pciIV LO10
  3477. prCURREdisabxi    ;#l,7disab, r0H 
  3478. ;
  3479. t@TED
  3480.  e_fa LOffs10
  3481. ndo LOs        ;z tov d LO10
  3482. :
  3483.     movaw LO10
  3484. l    c
  3485. ;
  3486. t10
  3487.  ah,7har
  3488. ;
  3489. t10
  3490. 10
  3491. s10
  3492. 10
  3493. 10
  3494. elae:_fal pentre:keribSET_Ce:, Dm 
  3495. s}rousole.
  3496.  
  3497.